home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / boostrs.arc / GETSTR.ASM < prev    next >
Assembly Source File  |  1980-01-01  |  2KB  |  132 lines

  1. ;**************************************************
  2. ;
  3. ;       Type
  4. ;          AnyString  =  string[255];
  5. ;          ColumnType =  0..80;
  6. ;          RowType    =  0..25;
  7. ;
  8. ;       Const
  9. ;          H  = 'H';
  10. ;          V  = 'V';
  11. ;
  12. ;       Procedure GetStr(    HV : Char;
  13. ;                         VAR S : AnyString;
  14. ;                             X : ColumnType;
  15. ;                             Y : RowType;
  16. ;                           LEN : Integer);
  17. ;
  18. ;       Reads string at X,Y into S for length LEN.
  19. ;       HV is either 'H' or 'V', indicating
  20. ;       a horizontal (right to left) get or a
  21. ;       vertical (top to bottom) get, respectively.
  22. ;       If X=Y=0, then read begins at current
  23. ;       cursor position.  Otherwise, read begins
  24. ;       at (X,Y).  On exit, cursor points to last
  25. ;       byte read plus one.
  26. ;
  27. ;**************************************************
  28. GETSTR    proc    near
  29.     push    bp
  30.     mov    bp,sp
  31.     push    ds
  32. ;
  33.     mov    ax,[bp+8]    ; get X
  34.     or    ax,ax
  35.     jz    g001
  36. ;
  37. ;       ***  Set DH,DL
  38. ;
  39.     dec    al
  40.     mov    dx,[bp+6]    ; get Y
  41.     dec    dl
  42.     mov    dh,al
  43.     xchg    dh,dl
  44.     jmp    G002
  45. ;
  46. ;       ***  Get Cursor
  47. ;
  48. G001:    xor    bh,bh
  49.     mov    ah,3
  50.     int    10h        ; get cursor
  51. ;
  52. ;       ***  Set length of S
  53. ;
  54. G002:    mov    es,[bp+12]    ; segment of S
  55.     mov    di,[bp+10]    ; offset of S
  56.     mov    cx,[bp+4]    ; LEN
  57.     mov    es:[di],cl    ; set length
  58.     inc    di
  59.     push    cx
  60. ;
  61. ;       ***  Convert X,Y to offset
  62. ;
  63.     mov    bl,dh        ; row
  64.     xor    bh,bh
  65.     mov    ax,bx
  66.     mov    cl,7
  67.     shl    ax,cl        ; row * 128
  68.     mov    cl,5
  69.     shl    bx,cl        ; row * 32
  70.     add    bx,ax        ; row * 160
  71.     mov    al,dl        ; column
  72.     xor    ah,ah
  73.     shl    ax,1        ; col * 2
  74.     add    bx,ax        ; cursor offset
  75. ;
  76. ;       ***  Move string to S
  77. ;
  78.     pop    cx
  79.     mov    si,bx
  80.     mov    bx,449h
  81.     xor    ax,ax
  82.     mov    ds,ax
  83.     mov    al,[bx]    ; video mode byte
  84.     cmp    al,7
  85.     jne    graphx
  86.     mov    dx,0B000h
  87.     jmp    c001
  88. graphx:
  89.     mov    dx,03DAh    ; for IBM CGA,
  90. VR:    in    al,dx        ; we must do this
  91.     and    al,1000b    ; so we won't see
  92.     jz    vr        ; snow . . .
  93.     mov    dx,0B800h
  94. c001:    mov    ds,dx
  95. ;
  96.     mov    dx,[bp+14]
  97.     cmp    dl,'v'
  98.     je    g002a
  99.     cmp    dl,'V'
  100.     je    g002a
  101.     mov    dx,2        ; Set H incr
  102.     jmp    g003
  103. G002a:    mov    dx,160        ; Set V incr
  104. ;
  105. G003:    mov    al,ds:[si]    ; get screen char
  106.     stosb            ; store it in str
  107.     add    si,dx        ; next screen char
  108.     loop    g003        ; loop until done
  109.     cmp    dl,2
  110.     je    g004
  111.     sub    si,158
  112. ;
  113. ;       ***  Set Cursor
  114. ;            for exit
  115. ;
  116. G004:    mov    ax,si
  117.     xor    dx,dx
  118.     mov    bx,160
  119.     div    bx
  120.     shr    dl,1
  121.     mov    dh,al
  122.     mov    ah,2
  123.     int    10h
  124. ;
  125.     pop    ds
  126.     mov    sp,bp
  127.     pop    bp
  128.     ret    12
  129. GETSTR    endp
  130.  
  131.  
  132.